package com.itheima.day11.meFile.test8;

import java.io.File;
import java.util.HashMap;
import java.util.Scanner;

/*
    查看指定文件夹下有多少同后缀名文件
    如：txt=1 iml=2
 */
public class TestS {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(true){
            System.out.println("请输入您要查询的文件地址："); // myCode
            String siteFile = sc.nextLine();
            siteFile.trim();
            File file = new File(siteFile);
            try {
                HashMap<String, Integer> hm = getFileCount(file);
                System.out.println(hm);
                System.out.println("是否继续？ 继续：Y/y 退出：任意键回车");
            } catch (NullPointerException e) {
                System.out.println("地址值不正确，是否继续？ 继续：Y/y 退出：任意键回车");
            }
            String select = sc.nextLine();
            select.trim();
            if(!"Y".equals(select) && !"y".equals(select)){
                System.out.println("拜那个拜");
                break;
            }
        }

    }

    // 功能入口，返回用户指定查看文件加下同后缀名文件个数的map集合
    public static HashMap<String, Integer> getFileCount(File file) throws NullPointerException {
        HashMap<String, Integer> hm = new HashMap<>();
        getFileCount(hm, file);
        return hm;
    }

    // 功能逻辑实现
    public static void getFileCount(HashMap<String, Integer> hm, File file) {
        // 获取文件下的所有文件和文件夹集合
        File[] filesArr = file.listFiles();
        if(filesArr == null){
            throw new NullPointerException();
        }

        // 遍历所有集合
        for (File f : filesArr) {
            // 判断当前是否是文件
            if (f.isFile()) {
                // 当前是文件
                // 需获得文件名
                String fName = f.getName();
                // 获得文件后缀名
                String[] split = fName.split("\\.");
                String fileEndName = split[split.length - 1];
                // 判断该后缀名文件是否在map集合中出现过
                if(hm.containsKey(fileEndName)){
                    // 出现过则增加记录次数
                    Integer count = hm.get(fileEndName);
                    count++;
                    hm.put(fileEndName,count);
                }else{
                    // 没有出现过，则记录该文件
                    hm.put(fileEndName,1);
                }
            } else {
                // 说明当前是文件夹，则需要继续调用本方法
                getFileCount(hm, f);
            }
        }

    }
}
